<?php

require_once 'MainPageWidget.php';
class UserListWidget extends MainPageWidget
/**
 * Класс UserListWidget -- список пользователей (users.html).
 */
{
	public $title = 'Новые участники';
	// список ролей, из которых можно выбирать текущую для юзеров..
	public $accepted_roles = array('moderator', 'member');
	// кол-во юзверей в списке
	public $users_count = 3;
	// порядок сортировки: 'name', '_date'
	public $order_by = 'name';

	public function Render()
	{
		$this->ctx->rh->UseClass('RL_CyrDate');
		$community_oid = $this->getParam('community_oid', $this->acl_assistant->acl_data['comity_oid']);
		$order_by_p = $this->getParam('order_by', '_date');
		switch( $order_by_p) {
		case     '_date': $order_by = 'objects.ctime desc'; break;
		case 'activity': $order_by = 'user.fullname'; break;
		case     'name':
		default:
			$order_by_p = 'name';
			$order_by   = 'user.fullname';
			break;
		}

		$operations = $this->acl_assistant->getAvailableOperations();

		$community_roles = $this->acl_assistant->getRolesUserList( $community_oid );
		
		$roles_ql = 'select objects where role.oid > 0';
		$rs = $this->store->find($roles_ql);
		if ($rs) {
			$roles = array();
			while ($role = $rs->next()) {
				$t = $role->data;
				$t['id'] = $role->id;
				$roles[$role->id] = $t;
			}
		}
		// список общеузловых ролей из хранилища
		
		$members = array();
		
		// соберем данные по всем ролям в один массив
		$users_role = array();
		foreach ($community_roles as $k=>$role) {
			// показываем только часть ролей #196
			if (!in_array($roles[$role['id_object']]['name'], $this->accepted_roles)) {
				unset($community_roles[$k]);
				continue;
			}
			$community_roles[$k]['title'] = $roles[$role['id_object']]['title'];
			
			foreach ($role['users'] as $role_user) {
				$t = $role_user;
				$t['active_role'] = $role;
				$t['active_role']['title'] = $roles[$role['id_object']]['title'];
				$users_role[$role_user['id_object']] = $t;
			}
		}
		// итого тут два массива: $community_roles, $users_role
		
		// выдернем всех пользователей
		$user_ql = 'select objects where user.oid IN :0 order by '.$order_by." limit 0,".$this->getParam("users_count", 3);
		$rs = $this->store->find($user_ql, array(array_keys($users_role)));
		if ($rs) {
			while ($user = $rs->next()) {
				$t = $user->data;
				$t['url'] = $user->id;
				$t['id']  = $user->id;
				$t['ctime'] = RL_CyrDate::newFromStr("%Y-%m-%d %H:%i:%s", $user->ctime);
				$t['active_role'] = $users_role[$user->id]['active_role'];
				$members[] = $t;
			}
		}

		$menu = $this->renderMenu();
		foreach($menu as $k=>$mi) {
			if ($mi['action'] === $order_by_p) {
				$menu[$k]['is_current'] = true;
			}
		}
		/*
		$content['acl'] = array_fill_keys($operations, true); // это экспериментальная функция ее нельзя использовать, в моем пхп ее вообще нету
		// см. http://ru2.php.net/manual/ru/function.array-fill-keys.php
		*/

		$content['actions'] = $operations;
		$content['menu'] = $menu;
		$content['items'] = $members;
		$content['members_count'] = count($members);
		$content['roles'] = $community_roles;
		$this->content = $content;
		return $this;
	}

	public function settingsForm ()
	{
		$config['form'] = array(
			'title' => 'Участники',
			'fields' => array(

				'title' => array(
					'type' => 'text',
					'title' => 'Название',
					'default' => $this->title,
				),

				'users_count' => array(
					'type' => 'text',
					'title' => 'Количество пользователей',
					'default' => $this->users_count,
				),

				'order_by' => array(
					'type' => 'select',
					'title' => 'Порядок сортировки',
					'default' => $this->getParam('order_by', '_date'),
					'options' => array(
						array(
							'title' => 'По имени',
							'value' => 'name',
						),
						array(
							'title' => 'По дате',
							'value' => '_date',
						),
					),
				),
			),
		);
		return $config['form'];
	} // end of method settingsForm

	public function renderMenu ()
	{
		$menu = array(
			array(
				'action' => 'name',
				'title'  => 'Order by name',
			),
			array(
				'action' => '_date',
				'title'  => 'Order by regdate',
			),
			/*
			array(
				'action' => 'activity',
				'title'  => 'Order by activity',
			),
			 */
		);
		return $menu;
	} // end of function renderMenu

}


?>
